package com.foreknow.demo24;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * 删除完全体
 *
 *
 * 事物
 * JDBC中如何设置事物提交方式
 * void	setAutoCommit(boolean autoCommit)
 *           将此连接的自动提交模式设置为给定状态。
 * autoCommit - 为 true 表示启用自动提交模式；为 false 表示禁用自动提交模式
 * 如果将setAutoCommit(false)之后，那么DML（insert update delete）之后一定要提交事物
 *  void	commit()
 *           使所有上一次提交/回滚后进行的更改成为持久更改，并释放此 Connection 对象当前持有的所有数据库锁。
 *  void	rollback()
 *           取消在当前事务中进行的所有更改，并释放此 Connection 对象当前持有的所有数据库锁。
 */
public class PreparedStatementTransaction {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demodb?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "zjjlive82");

            //------------将事物的提交方式改为手动提交--------------
            connection.setAutoCommit(false);

            //获取到到PreparedStatement接口
            PreparedStatement pstmt = connection.prepareStatement("delete from emp where empno=?");
            //将？替换为具体的值
            pstmt.setInt(1, 8888);
            //执行查询
            int isRigth = pstmt.executeUpdate();

            //---------------手动提交事物----------------
            connection.commit();

            System.out.println(isRigth);

            //关闭资源
            pstmt.close();
            connection.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}